package top.yxqz.spring.transaction.annotation.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.backoff.BackOff;
import top.yxqz.spring.transaction.annotation.dao.BookDao;
import top.yxqz.spring.transaction.annotation.service.BookService;

/**
 * @author: 余小小
 * @date: 2023/4/20
 * @description：图书服务实现类 实现类中，只写功能的实现，而不是在dao中进行实现
 * dao只是一个操作数据库的接口，而不是实现类
 *  @Transactional 通常都是在实现类中使用（目标类）
 *  1.可以放在方法上，只有该方法会被Spring事务管理
 *  2.可以放在类上，该类中的所有方法都会被Spring事务管理（常用）
 */
@Service("bookService")
@Transactional
public class BookServiceImpl implements BookService {
    @Autowired
    private BookDao bookDao;

    /**
     * 实现买书的操作
     */
    @Override
    public void buyBook(Integer userId, Integer bookId) {
        //      查询图书的价格
        Integer price = bookDao.getPriceByBook(bookId);
//        更新图书库存
        bookDao.updateStock(bookId);
//        更新用户余额
        bookDao.updateBalance(userId, price);
    }
}
